package org.example.offical.doc.rag;

/**
 * 好文：https://docs.langchain4j.dev/tutorials/rag
 *
 * Retrieval-Augmented Generation 检索增强生成
 * LLM的知识仅限于它所训练的数据。如果您想让LLM了解特定领域的知识或专有数据，有2种解决方案：RAG。微调（fine-tuning），以及RAG+微调
 *
 * 什么是RAG：简而言之，RAG是在将数据发送给LLM之前，从您的数据中查找相关信息并将其注入提示的方法。这样LLM将获得（希望）相关信息，并能够使用这些信息进行回复，这应该会降低幻觉的可能性。
 *
 * 检索信息的方式：
 * 1. Full-text (keyword) search 全文（关键字）搜索。该方法使用TF-IDF和BM25等技术，通过将查询中的关键字（例如用户询问的内容）与文档数据库进行匹配来搜索文档。它根据这些关键字在每个文档中的频率和相关性对结果进行排名。
 * 2. Vector search 向量搜索，也被称为“语义搜索”，使用嵌入模型将文本文档转换为数字的向量，它然后根据查询向量和文档向量之间的余弦相似度或其他相似度/距离度量来查找和排序文档，从而捕获更深层次的语义含义。
 * 3. Hybrid 混合。组合多种搜索方法（例如，全文+向量）通常会提高搜索的有效性。
 *
 * RAG 分为个阶段，索引和检索 Indexing and Retrieval
 * 1. Indexing：这个过程可以根据所使用的信息检索方法而有所不同。对于向量搜索，这通常涉及清理文档，用额外的数据和元信息丰富它们，将它们分成更小的段（又名分块），嵌入这些段，最后将它们存储在嵌入存储中（又名向量数据库）。
 * 2. Retrieval：检索，过程为对用户的问题进行向量化，并在向量数据库中进行相似度搜索。然后将相关片段（原始文档的片段）注入提示并发送到LLM。
 *
 * langchain4j支持3种RAG的写法：
 * 1. 简单RAG Easy RAG：最简单的RAG入门方法
 * 2. 原生RAG native RAG：使用向量搜索的RAG基本实现
 * 3. 高级RAG advance RAG：一个模块化RAG框架，允许额外的步骤，如查询转换、从多个来源检索和重新排序
 * @author superMan
 * @since fish_temp_since
 */
public class Concept {
}
